#!/bin/bash
# ==========================================
# 使用本机或 Docker 中的 Redis 清空 Redis 数据
# ==========================================

REDIS_HOST="127.0.0.1"
REDIS_PORT=6379
REDIS_AUTH="123456"  # 留空则不带密码

# 函数：使用 redis-cli 清空 Redis
flush_redis() {
  echo "⚠️ 即将清空 Redis 全部数据（$REDIS_HOST:$REDIS_PORT）..."
  read -p "确定要继续吗？(yes/no): " confirm
  if [[ "$confirm" != "yes" ]]; then
    echo "操作已取消。"
    exit 1
  fi

  if [[ -n "$REDIS_AUTH" ]]; then
    $1 -h $REDIS_HOST -p $REDIS_PORT -a "$REDIS_AUTH" FLUSHALL
  else
    $1 -h $REDIS_HOST -p $REDIS_PORT FLUSHALL
  fi

  if [[ $? -eq 0 ]]; then
    echo "✅ Redis 数据已清空！"
  else
    echo "❌ 清空失败，请检查连接参数。"
  fi
}

# 优先使用本机 redis-cli
if command -v redis-cli &> /dev/null; then
  echo "✅ 本机已安装 redis-cli，直接使用。"
  flush_redis redis-cli
  exit 0
fi

# 如果没有本地 redis-cli，则尝试从 Docker 中调用 redis-cli
if docker ps --format '{{.Names}}' | grep -q redis; then
  echo "🔍 发现正在运行的 Redis 容器，使用容器内 redis-cli 清理..."
  flush_redis "docker exec -i $(docker ps --format '{{.Names}}' | grep redis | head -n1) redis-cli"
  exit 0
fi

# 如果没有正在运行的 Redis 容器，使用临时容器执行 redis-cli
echo "🔄 未发现本地 redis-cli 或正在运行的 Redis 容器，使用临时 Docker 容器清理 Redis..."

docker run --rm redis redis-cli -h $REDIS_HOST -p $REDIS_PORT ${REDIS_AUTH:+-a "$REDIS_AUTH"} FLUSHALL

if [[ $? -eq 0 ]]; then
  echo "✅ Redis 数据已清空！"
else
  echo "❌ 清空失败，请检查 Redis 是否正在运行，或端口/密码设置是否正确。"
fi
